package com.howlaisi.devops.utils

// 配置gitlab的相关信息
def configGitlab(BRANCH_NAME) {
    // 配置提交代码的用户名及邮箱
    sh 'git config --global user.name "ximy"'
    sh 'git config --global user.email xtaylkss@163.com'
    // 下载.git-credentials文件，存放的是git的用户名及密码
    sh "cd /root/ && wget http://172.16.0.2:31163/ssh/.git-credentials -O /root/.git-credentials"
    // 配置不输入密码
    sh "git config --global credential.helper store"
    sh "git branch --set-upstream-to=origin/${BRANCH_NAME} ${BRANCH_NAME}"
}


// 更新argocd的gitops仓库
def updateGitopsRepo() {
    retry(10) {
        try {
            // 加这一段，主要是为了让代码是最新的，因为可能出现前面下载的代码，别的流水线提交了代码上去
            sh "git pull"
            sh "yq -V"
            sh """
                yq eval -i '.images |= map(select(.name == "${APP_NAME}-image").newName |= "$REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME")' $KUSTOMIZE_FILE
                yq eval -i '.images |= map(select(.name == "${APP_NAME}-image").newTag |= "$BRANCH_NAME-$BUILD_NUMBER-$COMMIT_ID")' $KUSTOMIZE_FILE
              """
            sh "cat $KUSTOMIZE_FILE"
            sh "git add $KUSTOMIZE_FILE"
            // git push可能会失败，失败的原因是，文件未有更改
            sh """
                git commit -am "devops: $JOB_NAME --> $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$BRANCH_NAME-$BUILD_NUMBER-$COMMIT_ID 发布"  || true
              """
            sh "git push"
        } catch (Exception e) {
            // 进来这里，代表git push可能是被reject了
            sh "git reset --hard HEAD^"
            // 抛出异常以触发重试

            throw e
        }
    }
}
